package com.jiunuan.live.living.interfaces.rpc;

import com.jiunuan.live.common.interfaces.dto.PageWrapper;
import com.jiunuan.live.living.interfaces.dto.LivingRoomReqDTO;
import com.jiunuan.live.living.interfaces.dto.LivingRoomRespDTO;

import java.util.List;

/**
 * @Author: JiuNuan
 * @CreateTime: 2024-08-19 15:03
 * @Description:
 */

public interface ILivingRoomRpc {
    // 当用户进入直播间时候，userId和这个roomId 关联起来

    // 当用户离开直播间时候，userId移除集合列表

    // 支持根据roomId查询批量的userId（set集合存储）
    /**
     * 支持根据roomId查询出批量的userId（set）存储，3000个人，元素非常多，O(n)
     * 根据房间ID查询用户ID列表
     * 本方法通过查询Redis中存储的房间用户关系数据，来获取与特定房间关联的所有用户ID
     * 使用Redis的Set数据结构进行快速查询
     *
     * @param livingRoomReqDTO 请求对象，包含房间ID和应用ID
     * @return 用户ID列表，与房间关联的所有用户ID
     */
    List<Long> queryUserIdByRoomId(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 直播间列表,分页查询
     * @param livingRoomReqDTO
     * @return
     */
    PageWrapper<LivingRoomRespDTO>list(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 根据用户id查询是否正在开播
     *
     * @param roomId
     * @return
     */
    LivingRoomRespDTO queryByRoomId(Integer roomId);

    /**
     * 开始直播
     * @param livingRoomReqDTO
     * @return 直播间id
     */
    Integer startLivingRoom(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 关闭直播间
     *
     * @param livingRoomReqDTO
     * @return
     */
    boolean closeLiving(LivingRoomReqDTO livingRoomReqDTO);
}
